﻿using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using RaytracerLib;
using RaytracerLib.Layers;
using RaytracerLib.MathLib;
using RaytracerLib.RenderableObjects;
using RaytracerLib.Postprocessing.LightCorrector;
using RaytracerLib.Resamplers;
using RaytracerLib.Samplers;
using RaytracerLib.Volumes;
using TomanuExtensions;
using RaytracerLib.ShadowTesters;
using RaytracerLib.Attenuations;
using System.Reflection;
using RaytracerLib.Layers.Interpolators;
using RaytracerLib.Layers.OverlayCorrectors;
using RaytracerLib.Lights;
using System.Globalization;
using RaytracerLib.MathLib.Polynomials;
using RaytracerLib.UVMappers;
using RaytracerLib.MathLib.RootFinders;
using YAXLib;
using RaytracerLib.Cameras;
using RaytracerLib.Postprocessing;

namespace Raytracer.Generator
{
    partial class TestScenes
    {
        private static void Generate_0520_0529()
        {
            List.Add(new TestScene()
            {
                Name = "sphere one side",
                Path = "Inside", 
                Index = 520,
                GetScene = () =>
                {
                    Scene scene = Scenes.Sphere_Inside();
                    Fast(scene);
                    scene.ActiveCamera.Pos = new Vector3(0, 1, -2.6);
                    scene.RenderableObjects["sphere"].OneSide = true;
                    scene.Lights["light"].Pos = new Vector3(0, 0, -8);
                    (scene.ActiveCamera as PerspectiveCamera).MinimalPlaneDistant = 1;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "plane one side",
                Path = "Inside", 
                Index = 521,
                GetScene = () =>
                {
                    Scene scene = Scenes.Sphere_Earth();
                    Fast(scene);
                    scene.RenderableObjects["plane"].OneSide = true;
                    scene.RenderableObjects["plane"].Up = -Vector3.YAXIS;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "triangle one side",
                Path = "Inside", 
                Index = 522,
                GetScene = () =>
                {
                    Scene scene = Scenes.Triangles_Earth();
                    Fast(scene);
                    scene.RenderableObjects["t1"].RotateAround(new Vector3(0, 0, 0), Vector3.YAXIS, 180);
                    scene.RenderableObjects["t2"].Remove();
                    return scene;
                }
            });
        }

        private static void Generate_0550_0569()
        {
            List.Add(new TestScene()
            {
                Name = "refraction 1-1.3 sphere flare diffuse 1",
                Path = "Refraction", 
                Index = 550,
                GetScene = () =>
                {
                    Scene scene = Scenes.Sphere_Refraction1();
                    Fast(scene);
                    scene.RenderOptions.EnvironmentRefractionIndice =
                        RefractiveIndices.Air;
                    scene.RenderableObjects["sphere"].DefaultMaterial.Name = "Water";
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionIndice =
                        RefractiveIndices.Water;
                    scene.RenderableObjects["sphere"].DefaultMaterial.Diffuse = LayersFactory.Solid(0.1);
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionTransmittance = LayersFactory.Solid(0.6);
                    scene.RenderableObjects["t1"].DefaultMaterial = TestMaterials.Solid("Blue", ColorFloat.SRGB_Blue);
                    scene.RenderableObjects["t2"].DefaultMaterial = scene.RenderableObjects["t1"].DefaultMaterial;
                    scene.RenderableObjects["sphere"].Pos = new Vector3(0, 0, -10);
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -14);
                    scene.Lights["light4"].Pos = new Vector3(1.5, 1.5, -9.5);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "refraction 1-1.3 sphere flare diffuse 2",
                Path = "Refraction", 
                Index = 551,
                GetScene = () =>
                {
                    Scene scene = Scenes.Sphere_Refraction1();
                    Fast(scene);
                    scene.RenderOptions.EnvironmentRefractionIndice =
                        RefractiveIndices.Air;
                    scene.RenderableObjects["sphere"].DefaultMaterial.Name = "Water";
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionIndice =
                        RefractiveIndices.Water;
                    scene.RenderableObjects["sphere"].DefaultMaterial.Diffuse = LayersFactory.Solid(0.3);
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionTransmittance = LayersFactory.Solid(0.6);
                    scene.RenderableObjects["t1"].DefaultMaterial = TestMaterials.Solid("Blue", ColorFloat.SRGB_Blue);
                    scene.RenderableObjects["t2"].DefaultMaterial = scene.RenderableObjects["t1"].DefaultMaterial;
                    scene.RenderableObjects["sphere"].Pos = new Vector3(0, 0, -10);
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -14);
                    scene.Lights["light4"].Pos = new Vector3(1.5, 1.5, -9.5);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "refraction 1-1 light in sphere 1",
                Path = "Refraction", 
                Index = 552,
                GetScene = () =>
                {
                    Scene scene = Scenes.Sphere_Refraction1();
                    Fast(scene);
                    scene.RenderOptions.EnvironmentRefractionIndice =
                        RefractiveIndices.Air;
                    scene.RenderableObjects["sphere"].DefaultMaterial.Name = "Water";
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionIndice =
                        RefractiveIndices.Water;
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionTransmittance = LayersFactory.Solid(ColorFloat.SRGB_Green);
                    scene.RenderableObjects["sphere"].DefaultMaterial.ReflectionTransmittance = LayersFactory.Solid(ColorFloat.SRGB_Green);
                    scene.RenderableObjects["t1"].DefaultMaterial = TestMaterials.Solid("Gray", new ColorFloat(0.8));
                    scene.RenderableObjects["t2"].DefaultMaterial = scene.RenderableObjects["t1"].DefaultMaterial;
                    scene.RenderableObjects["sphere"].Pos = new Vector3(0, 0, -10);
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -14);
                    scene.Lights["light2"].On = false;
                    scene.Lights["light3"].On = false;
                    scene.Lights["light4"].Pos = scene.RenderableObjects["sphere"].Pos;
                    scene.Lights["light4"].Color = new ColorFloat(0, 1, 1);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "refraction 1-1 light in sphere 2",
                Path = "Refraction", 
                Index = 553,
                GetScene = () =>
                {
                    Scene scene = Scenes.Sphere_Refraction1();
                    Fast(scene);
                    scene.RenderOptions.EnvironmentRefractionIndice =
                        RefractiveIndices.Air;
                    scene.RenderableObjects["sphere"].DefaultMaterial.Name = "Water";
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionIndice =
                        RefractiveIndices.Water;
                    scene.RenderableObjects["sphere"].DefaultMaterial.Diffuse = LayersFactory.Solid(0.3);
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionTransmittance = LayersFactory.Solid(ColorFloat.SRGB_Green);
                    scene.RenderableObjects["sphere"].DefaultMaterial.ReflectionTransmittance = LayersFactory.Solid(ColorFloat.SRGB_Green);
                    scene.RenderableObjects["t1"].DefaultMaterial = TestMaterials.Solid("Gray", new ColorFloat(0.8));
                    scene.RenderableObjects["t2"].DefaultMaterial = scene.RenderableObjects["t1"].DefaultMaterial;
                    scene.RenderableObjects["sphere"].Pos = new Vector3(0, 0, -10);
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -14);
                    scene.Lights["light2"].On = false;
                    scene.Lights["light3"].On = false;
                    scene.Lights["light4"].Pos = scene.RenderableObjects["sphere"].Pos;
                    scene.Lights["light4"].Color = new ColorFloat(0, 1, 1);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "shadow color 1",
                Index = 554,
                Path = "Shadow testers", 
                GetScene = () =>
                {
                    Scene scene = Scenes.Sphere_Refraction1();
                    Fast(scene);
                    scene.RenderOptions.EnvironmentRefractionIndice =
                        RefractiveIndices.Air;
                    scene.RenderableObjects["sphere"].DefaultMaterial.Name = "Air";
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionIndice =
                        RefractiveIndices.Air;
                    scene.RenderableObjects["sphere"].DefaultMaterial.Diffuse = LayersFactory.Solid(0.0);
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionTransmittance =
                        LayersFactory.Solid(new ColorFloat(0, 0.7, 0));
                    scene.RenderableObjects["sphere"].DefaultMaterial.ReflectionTransmittance =
                        LayersFactory.Solid(new ColorFloat(0, 0.7, 0));
                    scene.RenderableObjects["t1"].DefaultMaterial = TestMaterials.Solid("Gray", new ColorFloat(0.9));
                    scene.RenderableObjects["t2"].DefaultMaterial = scene.RenderableObjects["t1"].DefaultMaterial;
                    scene.RenderableObjects["sphere"].Pos = new Vector3(0, 0, -10);
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -14);
                    scene.Lights["light2"].Color = new ColorFloat(0.5);
                    scene.Lights["light3"].Color = new ColorFloat(0.5);
                    scene.Lights["light4"].Color = new ColorFloat(0.5);
                    scene.Lights["light4"].Pos = new Vector3(1.5, 1.5, -9.5);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "shadow color 2",
                Path = "Shadow testers", 
                Index = 555,
                GetScene = () =>
                {
                    Scene scene = Scenes.Sphere_Refraction1();
                    Fast(scene);
                    scene.RenderOptions.EnvironmentRefractionIndice =
                        RefractiveIndices.Air;
                    scene.RenderableObjects["sphere"].DefaultMaterial.Name = "Air";
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionIndice =
                        RefractiveIndices.Air;
                    scene.RenderableObjects["sphere"].DefaultMaterial.Diffuse = LayersFactory.Solid(0.0);
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionTransmittance =
                        LayersFactory.Solid(new ColorFloat(0.7, 0.7, 0));
                    scene.RenderableObjects["sphere"].DefaultMaterial.ReflectionTransmittance =
                        LayersFactory.Solid(new ColorFloat(0.7, 0.7, 0));
                    scene.RenderableObjects["t1"].DefaultMaterial = TestMaterials.Solid("Gray", new ColorFloat(0.9));
                    scene.RenderableObjects["t2"].DefaultMaterial = scene.RenderableObjects["t1"].DefaultMaterial;
                    scene.RenderableObjects["sphere"].Pos = new Vector3(0, 0, -10);
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -14);
                    scene.Lights["light4"].Pos = new Vector3(1.5, 1.5, -9.5);
                    scene.Lights["light2"].Color = new ColorFloat(0.5);
                    scene.Lights["light3"].Color = new ColorFloat(0.5);
                    scene.Lights["light4"].Color = new ColorFloat(0.5);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "shadow color 3",
                Path = "Shadow testers", 
                Index = 556,
                GetScene = () =>
                {
                    Scene scene = Scenes.Sphere_Refraction1();
                    Fast(scene);
                    scene.RenderOptions.EnvironmentRefractionIndice =
                        RefractiveIndices.Air;
                    scene.RenderableObjects["sphere"].DefaultMaterial.Name = "Air";
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionIndice =
                        RefractiveIndices.Air;
                    scene.RenderableObjects["sphere"].DefaultMaterial.Diffuse = LayersFactory.Solid(0.3);
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionTransmittance =
                        LayersFactory.Solid(new ColorFloat(0, 0.7, 0));
                    scene.RenderableObjects["sphere"].DefaultMaterial.ReflectionTransmittance =
                        LayersFactory.Solid(new ColorFloat(0, 0.7, 0));
                    scene.RenderableObjects["t1"].DefaultMaterial = TestMaterials.Solid("Gray", new ColorFloat(0.9));
                    scene.RenderableObjects["t2"].DefaultMaterial = scene.RenderableObjects["t1"].DefaultMaterial;
                    scene.RenderableObjects["sphere"].Pos = new Vector3(0, 0, -10);
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -14);
                    scene.Lights["light4"].Pos = new Vector3(1.5, 1.5, -9.5);
                    scene.Lights["light2"].Color = new ColorFloat(0.5);
                    scene.Lights["light3"].Color = new ColorFloat(0.5);
                    scene.Lights["light4"].Color = new ColorFloat(0.5);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "shadow color two spheres",
                Path = "Shadow testers", 
                Index = 557,
                GetScene = () =>
                {
                    Scene scene = Scenes.Sphere_Refraction1();
                    Fast(scene);
                    scene.RenderOptions.EnvironmentRefractionIndice =
                        RefractiveIndices.Air;
                    scene.RenderableObjects["sphere"].DefaultMaterial.Name = "Air";
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionIndice =
                        RefractiveIndices.Air;
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionTransmittance =
                        LayersFactory.Solid(new ColorFloat(0, 0.7, 0));
                    scene.RenderableObjects["sphere"].DefaultMaterial.ReflectionTransmittance =
                        LayersFactory.Solid(new ColorFloat(0, 0.7, 0));
                    scene.RenderableObjects["t1"].DefaultMaterial = TestMaterials.Solid("Gray", new ColorFloat(0.9));
                    scene.RenderableObjects["t2"].DefaultMaterial = scene.RenderableObjects["t1"].DefaultMaterial;
                    scene.RenderableObjects["sphere"].Pos = new Vector3(0, 0, -10);
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -14);
                    scene.RenderableObjects.Add(new SphereObject(Vector3.XAXIS, Vector3.YAXIS)
                    {
                        Pos = new Vector3(0, 0, -7),
                        Radius = 1,
                        DefaultMaterial = scene.RenderableObjects["sphere"].DefaultMaterial,
                        Name = "sphere2"
                    });
                    scene.Lights["light4"].Pos = new Vector3(1.5, 1.5, -9.5);
                    scene.Lights["light2"].Color = new ColorFloat(0.5);
                    scene.Lights["light3"].Color = new ColorFloat(0.5);
                    scene.Lights["light4"].Color = new ColorFloat(0.5);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "find outer object",
                Path = "Shadow testers", 
                Index = 558,
                GetScene = () =>
                {
                    Scene scene = Scenes.Sphere_Refraction1(0.1);
                    scene.RenderOptions.ShadowTestMethod = ShadowTestMethod.Solid;
                    scene.ActiveCamera.Film.MaxRayDepth = 5;
                    scene.RenderableObjects["t1"].Translate(new Vector3(-9.2, 0, 0));
                    scene.RenderableObjects["t2"].Translate(new Vector3(-9.2, 0, 0));
                    Fast(scene);
                    scene.RenderOptions.EnvironmentRefractionIndice =
                        RefractiveIndices.Air;
                    scene.RenderableObjects["sphere"].Pos = new Vector3(0, 0, -10);
                    scene.ActiveCamera.Pos = new Vector3(0, 1, -12);
                    (scene.ActiveCamera as PerspectiveCamera).MinimalPlaneDistant = 2;
                    scene.Lights["light4"].Pos = new Vector3(1.5, 1.5, -9.5);
                    scene.Lights["light2"].Pos = new Vector3(0, 0, -10.9);
                    scene.RenderableObjects.Add(new TriangleObject(new Vector3(1, 2, -9.25),
                        new Vector3(1, 0, -9.25), new Vector3(0, 0, -9.25))
                    {
                        Name = "t3",
                        DefaultMaterial = TestMaterials.Solid("yellow", ColorFloat.SRGB_Yellow)
                    });
                    scene.RenderableObjects.Add(new SphereObject(Vector3.XAXIS, Vector3.YAXIS)
                    {
                        Name = "sphere2",
                        Radius = 1.5,
                        Pos = scene.RenderableObjects["sphere"].Pos,
                        DefaultMaterial = TestMaterials.Refractive("Water", new ColorFloat(0.1), false, RefractiveIndices.Water),
                    });
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "reflection factor 1",
                Path = "Reflection", 
                Index = 559,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    scene.RenderableObjects["sphere1"].DefaultMaterial.ReflectionTransmittance = LayersFactory.Solid(0.3);
                    return scene;
                }
            });
        }

        private static void Generate_0560_0569()
        {
            List.Add(new TestScene()
            {
                Name = "reflection factor 2",
                Path = "Reflection", 
                Index = 560,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    scene.RenderableObjects["sphere1"].DefaultMaterial.ReflectionTransmittance = LayersFactory.Solid(0.6);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "solid shadows",
                Path = "Shadow testers", 
                Index = 561,
                GetScene = () =>
                {
                    Scene scene = Scenes.Sphere_Refraction1();
                    Fast(scene);
                    scene.RenderOptions.ShadowTestMethod = ShadowTestMethod.Solid;
                    scene.RenderOptions.EnvironmentRefractionIndice =
                        RefractiveIndices.Air;
                    scene.RenderableObjects["sphere"].DefaultMaterial.Name = "Air";
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionIndice =
                        RefractiveIndices.Air;
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionTransmittance =
                        LayersFactory.Solid(new ColorFloat(0, 0.7, 0));
                    scene.RenderableObjects["sphere"].DefaultMaterial.ReflectionTransmittance =
                        LayersFactory.Solid(new ColorFloat(0, 0.7, 0));
                    scene.RenderableObjects["t1"].DefaultMaterial = TestMaterials.Solid("Gray", new ColorFloat(0.9));
                    scene.RenderableObjects["t2"].DefaultMaterial = scene.RenderableObjects["t1"].DefaultMaterial;
                    scene.RenderableObjects["sphere"].Pos = new Vector3(0, 0, -10);
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -14);
                    scene.RenderableObjects.Add(new SphereObject(Vector3.XAXIS, Vector3.YAXIS)
                    {
                        Pos = new Vector3(0, 0, -7),
                        Radius = 1,
                        DefaultMaterial = scene.RenderableObjects["sphere"].DefaultMaterial,
                        Name = "sphere2"
                    });
                    scene.Lights["light4"].Pos = new Vector3(1.5, 1.5, -9.5);
                    scene.Lights["light2"].Color = new ColorFloat(0.5);
                    scene.Lights["light3"].Color = new ColorFloat(0.5);
                    scene.Lights["light4"].Color = new ColorFloat(0.5);
                    return scene;
                }
            });
        }

        private static void Generate_0580_0589()
        {
            List.Add(new TestScene()
            {
                Name = "attenuation color mix #1",
                Index = 580,
                Path = "Shadow testers", 
                GetScene = () =>
                {
                    Scene scene = Scenes.Sphere_Refraction1();
                    Fast(scene);
                    scene.RenderableObjects["t1"].DefaultMaterial = TestMaterials.CheckBoard("checkboard",
                        new ColorFloat(0, 0.5, 0.5),
                        new ColorFloat(0.5, 0.5, 0), 0.1, 0.1);
                    scene.RenderableObjects["t2"].DefaultMaterial = scene.RenderableObjects["t1"].DefaultMaterial;
                    scene.RenderableObjects["sphere"].DefaultMaterial.Name = "Air";
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionIndice =
                        scene.RenderOptions.EnvironmentRefractionIndice;
                    scene.RenderableObjects["sphere"].DefaultMaterial.ReflectionTransmittance =
                        VolumesFactory.Solid(1);
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionTransmittance =
                        VolumesFactory.Solid(1);
                    scene.RenderOptions.EnvironmentAttenuation = new ExponentalAttenuation(0.2, 0.2, 0.2);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "attenuation color mix #2",
                Index = 581,
                Path = "Shadow testers", 
                GetScene = () =>
                {
                    Scene scene = Scenes.Sphere_Refraction1();
                    Fast(scene);
                    scene.RenderableObjects["t1"].DefaultMaterial = TestMaterials.CheckBoard("checkboard",
                        new ColorFloat(0, 0.5, 0.5),
                        new ColorFloat(0.5, 0.5, 0), 0.1, 0.1);
                    scene.RenderableObjects["t2"].DefaultMaterial = scene.RenderableObjects["t1"].DefaultMaterial;
                    scene.RenderableObjects["sphere"].DefaultMaterial.Name = "Air";
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionIndice =
                        scene.RenderOptions.EnvironmentRefractionIndice;
                    scene.RenderableObjects["sphere"].DefaultMaterial.ReflectionTransmittance =
                        VolumesFactory.Solid(1);
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionTransmittance =
                        VolumesFactory.Solid(1);
                    scene.RenderOptions.EnvironmentAttenuation = new ExponentalAttenuation(0, 0.2, 0.2);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "attenuation color mix #3",
                Path = "Shadow testers", 
                Index = 582,
                GetScene = () =>
                {
                    Scene scene = Scenes.Sphere_Refraction1();
                    Fast(scene);
                    scene.RenderableObjects["t1"].DefaultMaterial = TestMaterials.CheckBoard("checkboard",
                        new ColorFloat(0, 0.5, 0.5),
                        new ColorFloat(0.5, 0.5, 0), 0.1, 0.1);
                    scene.RenderableObjects["t2"].DefaultMaterial = scene.RenderableObjects["t1"].DefaultMaterial;
                    scene.RenderableObjects["sphere"].DefaultMaterial.Name = "Air";
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionIndice =
                        scene.RenderOptions.EnvironmentRefractionIndice;
                    scene.RenderableObjects["sphere"].DefaultMaterial.ReflectionTransmittance =
                        VolumesFactory.Solid(1);
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionTransmittance =
                        VolumesFactory.Solid(1);
                    scene.RenderOptions.EnvironmentAttenuation = new ExponentalAttenuation(0.2, 0, 0.2);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "attenuation color mix #4",
                Path = "Shadow testers", 
                Index = 583,
                GetScene = () =>
                {
                    Scene scene = Scenes.Sphere_Refraction1();
                    Fast(scene);
                    scene.RenderableObjects["t1"].DefaultMaterial = TestMaterials.CheckBoard("checkboard",
                        new ColorFloat(0, 0.5, 0.5),
                        new ColorFloat(0.5, 0.5, 0), 0.1, 0.1);
                    scene.RenderableObjects["t2"].DefaultMaterial = scene.RenderableObjects["t1"].DefaultMaterial;
                    scene.RenderableObjects["sphere"].DefaultMaterial.Name = "Air";
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionIndice =
                        scene.RenderOptions.EnvironmentRefractionIndice;
                    scene.RenderableObjects["sphere"].DefaultMaterial.ReflectionTransmittance =
                        VolumesFactory.Solid(1);
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionTransmittance =
                        VolumesFactory.Solid(1);
                    scene.RenderOptions.EnvironmentAttenuation = new ExponentalAttenuation(0.2, 0.2, 0);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "attenuation air mirror #1",
                Path = "Shadow testers", 
                Index = 584,
                GetScene = () =>
                {
                    Scene scene = Scenes.Procedural_Layer(true, 0.5 / 5, 6 / 5);
                    Fast(scene);
                    scene.RenderableObjects["sphere"].DefaultMaterial = TestMaterials.Shiny("shiny", ColorFloat.White);
                    scene.RenderableObjects["sphere"].DefaultMaterial.Diffuse = null;
                    scene.RenderableObjects["plane"].DefaultMaterial = TestMaterials.Solid("solid", ColorFloat.SRGB_Red);
                    scene.Lights["light3"].Remove();
                    scene.Lights["light4"].Remove();
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights["light2"].Color = ColorFloat.White;
                    scene.Lights["light1"].Pos = new Vector3(0, 3, -5);
                    scene.Lights["light2"].Pos = new Vector3(0, 3, 5);
                    scene.RenderOptions.EnvironmentAttenuation = new ExponentalAttenuation(0.2, 0.2, 0.2);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "attenuation air mirror #2",
                Path = "Shadow testers", 
                Index = 585,
                GetScene = () =>
                {
                    Scene scene = Scenes.Procedural_Layer(true, 0.5 / 5, 6 / 5);
                    Fast(scene);
                    scene.RenderableObjects["sphere"].DefaultMaterial = TestMaterials.Shiny("shiny", ColorFloat.White);
                    scene.RenderableObjects["sphere"].DefaultMaterial.Diffuse = null;
                    scene.RenderableObjects["plane"].DefaultMaterial = TestMaterials.Solid("solid", ColorFloat.SRGB_Red);
                    scene.Lights["light3"].Remove();
                    scene.Lights["light4"].Remove();
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights["light2"].Color = ColorFloat.White;
                    scene.Lights["light1"].Pos = new Vector3(0, 3, -5);
                    scene.Lights["light2"].Pos = new Vector3(0, 3, 5);
                    scene.RenderOptions.EnvironmentAttenuation = new ExponentalAttenuation(0.4, 0.4, 0.4);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "attenuation air mirror #3",
                Path = "Shadow testers", 
                Index = 586,
                GetScene = () =>
                {
                    Scene scene = Scenes.Procedural_Layer(true, 0.5 / 5, 6 / 5);
                    Fast(scene);
                    scene.RenderableObjects["sphere"].DefaultMaterial = TestMaterials.Shiny("shiny", ColorFloat.White);
                    scene.RenderableObjects["sphere"].DefaultMaterial.Diffuse = null;
                    scene.RenderableObjects["plane"].DefaultMaterial = TestMaterials.Solid("solid", ColorFloat.SRGB_Red);
                    scene.Lights["light3"].Remove();
                    scene.Lights["light4"].Remove();
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights["light2"].Color = ColorFloat.White;
                    scene.Lights["light1"].Pos = new Vector3(0, 3, -5);
                    scene.Lights["light2"].Pos = new Vector3(0, 3, 5);
                    scene.RenderOptions.EnvironmentAttenuation = new ExponentalAttenuation(0.6, 0.6, 0.6);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "attenuation air checker #1",
                Path = "Shadow testers", 
                Index = 587,
                GetScene = () =>
                {
                    Scene scene = Scenes.Procedural_Layer(true, 0.5 / 5, 6 / 5);
                    Fast(scene);
                    scene.Lights["light3"].Remove();
                    scene.Lights["light4"].Remove();
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights["light2"].Color = ColorFloat.White;
                    scene.Lights["light1"].Pos = new Vector3(0, 3, -5);
                    scene.Lights["light2"].Pos = new Vector3(0, 3, 5);
                    scene.RenderOptions.EnvironmentAttenuation = new ExponentalAttenuation(0.2, 0.2, 0.2);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "attenuation air checker #2",
                Path = "Shadow testers", 
                Index = 588,
                GetScene = () =>
                {
                    Scene scene = Scenes.Procedural_Layer(true, 0.5 / 5, 6 / 5);
                    Fast(scene);
                    scene.Lights["light3"].Remove();
                    scene.Lights["light4"].Remove();
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights["light2"].Color = ColorFloat.White;
                    scene.Lights["light1"].Pos = new Vector3(0, 3, -5);
                    scene.Lights["light2"].Pos = new Vector3(0, 3, 5);
                    scene.RenderOptions.EnvironmentAttenuation = new ExponentalAttenuation(0.3, 0.3, 0.3);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "attenuation air checker #3",
                Path = "Shadow testers", 
                Index = 589,
                GetScene = () =>
                {
                    Scene scene = Scenes.Procedural_Layer(true, 0.5 / 5, 6 / 5);
                    Fast(scene);
                    scene.Lights["light3"].Remove();
                    scene.Lights["light4"].Remove();
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights["light2"].Color = ColorFloat.White;
                    scene.Lights["light1"].Pos = new Vector3(0, 3, -5);
                    scene.Lights["light2"].Pos = new Vector3(0, 3, 5);
                    scene.RenderOptions.EnvironmentAttenuation = new ExponentalAttenuation(0.6, 0.6, 0.6);
                    return scene;
                }
            });
        }

        private static void Generate_0590_0599()
        {
            List.Add(new TestScene()
            {
                Name = "attenuation sphere 1-1 transmittance",
                Path = "Shadow testers", 
                Index = 590,
                GetScene = () =>
                {
                    Scene scene = Scenes.Sphere_Refraction1();
                    Fast(scene);
                    scene.RenderableObjects["t1"].DefaultMaterial = TestMaterials.CheckBoard("checkboard",
                        new ColorFloat(0, 0.5, 0.5),
                        new ColorFloat(0.5, 0.5, 0), 0.1, 0.1);
                    scene.RenderableObjects["t2"].DefaultMaterial = scene.RenderableObjects["t1"].DefaultMaterial;
                    scene.RenderableObjects["sphere"].DefaultMaterial.Name = "Air";
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionIndice =
                        scene.RenderOptions.EnvironmentRefractionIndice;
                    scene.RenderableObjects["sphere"].DefaultMaterial.ReflectionTransmittance =
                        VolumesFactory.Solid(0.8);
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionTransmittance =
                        VolumesFactory.Solid(0.8);
                    scene.RenderOptions.EnvironmentAttenuation = new ExponentalAttenuation(0.2, 0.2, 0.2);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "attenuation additive #1",
                Path = "Shadow testers", 
                Index = 591,
                GetScene = () =>
                {
                    Scene scene = Scenes.Sphere_Refraction1();
                    Fast(scene);
                    scene.RenderableObjects["t1"].DefaultMaterial = TestMaterials.CheckBoard("checkboard",
                        new ColorFloat(0, 0.5, 0.5),
                        new ColorFloat(0.5, 0.5, 0), 0.1, 0.1);
                    scene.RenderableObjects["t2"].DefaultMaterial = scene.RenderableObjects["t1"].DefaultMaterial;
                    scene.RenderableObjects["sphere"].DefaultMaterial.Name = "Air";
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionIndice =
                        scene.RenderOptions.EnvironmentRefractionIndice;
                    scene.RenderableObjects["sphere"].DefaultMaterial.ReflectionTransmittance =
                        VolumesFactory.Solid(1);
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionTransmittance =
                        VolumesFactory.Solid(1);
                    scene.RenderOptions.EnvironmentAttenuation =
                        new ExponentalAttenuation(0.2, 0.2, 0.2);
                    scene.RenderableObjects["sphere"].DefaultMaterial.Attenuation =
                        scene.RenderOptions.EnvironmentAttenuation;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "attenuation additive #2",
                Index = 592,
                Path = "Shadow testers", 
                GetScene = () =>
                {
                    Scene scene = Scenes.Sphere_Refraction1();
                    Fast(scene);
                    scene.RenderableObjects["t1"].DefaultMaterial = TestMaterials.CheckBoard("checkboard",
                        new ColorFloat(0, 0.5, 0.5),
                        new ColorFloat(0.5, 0.5, 0), 0.1, 0.1);
                    scene.RenderableObjects["t2"].DefaultMaterial = scene.RenderableObjects["t1"].DefaultMaterial;
                    scene.RenderableObjects["sphere"].DefaultMaterial.Name = "Air";
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionIndice =
                        scene.RenderOptions.EnvironmentRefractionIndice;
                    scene.RenderableObjects["sphere"].DefaultMaterial.ReflectionTransmittance =
                        VolumesFactory.Solid(1);
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionTransmittance =
                        VolumesFactory.Solid(1);
                    scene.RenderOptions.EnvironmentAttenuation =
                        new ExponentalAttenuation(0.2, 0.2, 0.2);
                    scene.RenderableObjects["sphere"].DefaultMaterial.Attenuation =
                        scene.RenderOptions.EnvironmentAttenuation;
                    scene.RenderableObjects["sphere"].Remove();
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "attenuation 1-1 planes #1",
                Path = "Shadow testers", 
                Index = 593,
                GetScene = () =>
                {
                    Scene scene = Scenes.Planes_Refraction(4);
                    Fast(scene);
                    scene.RenderableObjects["plane1"].DefaultMaterial.ReflectionTransmittance = null;
                    scene.RenderableObjects["plane2"].DefaultMaterial.ReflectionTransmittance = null;
                    scene.Materials["Glass"].RefractionIndice = scene.RenderOptions.EnvironmentRefractionIndice;
                    scene.Materials["Glass"].Name = "Air";
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "attenuation 1-1 planes #2",
                Path = "Shadow testers", 
                Index = 594,
                GetScene = () =>
                {
                    Scene scene = Scenes.Planes_Refraction(4);
                    Fast(scene);
                    scene.RenderableObjects["plane1"].DefaultMaterial.ReflectionTransmittance = null;
                    scene.RenderableObjects["plane2"].DefaultMaterial.ReflectionTransmittance = null;
                    scene.Materials["Glass"].Attenuation = new ExponentalAttenuation(0.2, 0.2, 0.2);
                    scene.Materials["Glass"].RefractionIndice = scene.RenderOptions.EnvironmentRefractionIndice;
                    scene.Materials["Glass"].Name = "Air";
                    return scene;
                }
            });

            //

            List.Add(new TestScene()
            {
                Name = "attenuation 1-1.5 planes #1",
                Path = "Shadow testers", 
                Index = 595,
                GetScene = () =>
                {
                    Scene scene = Scenes.Planes_Refraction(4);
                    Fast(scene);
                    scene.RenderableObjects["plane1"].DefaultMaterial.ReflectionTransmittance = null;
                    scene.RenderableObjects["plane2"].DefaultMaterial.ReflectionTransmittance = null;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "attenuation 1-1.5 planes #2",
                Path = "Shadow testers", 
                Index = 596,
                GetScene = () =>
                {
                    Scene scene = Scenes.Planes_Refraction(4);
                    Fast(scene);
                    scene.RenderableObjects["plane1"].DefaultMaterial.ReflectionTransmittance = null;
                    scene.RenderableObjects["plane2"].DefaultMaterial.ReflectionTransmittance = null;
                    scene.Materials["Glass"].Attenuation = new ExponentalAttenuation(0.2, 0.2, 0.2);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "attenuation two spheres #1",
                Path = "Shadow testers", 
                Index = 597,
                GetScene = () =>
                {
                    Scene scene = Scenes.Sphere_Refraction1(0.1, true);
                    Fast(scene);
                    scene.RenderOptions.EnvironmentRefractionIndice =
                        RefractiveIndices.Air;
                    scene.RenderableObjects["sphere"].DefaultMaterial.Name = "Air";
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionIndice =
                        RefractiveIndices.Air;
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionIndice = RefractiveIndices.Air;
                    scene.RenderableObjects["sphere"].DefaultMaterial.Name = "Air";
                    scene.RenderableObjects["t1"].DefaultMaterial.ReflectionTransmittance = null;
                    scene.RenderableObjects["sphere"].Pos = new Vector3(0, 0, -10);
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -14);
                    scene.RenderableObjects.Add(new SphereObject(Vector3.XAXIS, Vector3.YAXIS)
                    {
                        Pos = new Vector3(0, 0, -7),
                        Radius = 1,
                        DefaultMaterial = TestMaterials.Refractive("Air 1", new ColorFloat(0.1)),
                        Name = "sphere2"
                    });
                    scene.RenderableObjects["sphere2"].DefaultMaterial.RefractionIndice =
                        RefractiveIndices.Air;
                    scene.Materials["Air"].Attenuation = new ExponentalAttenuation(1, 0.05, 0.05);
                    scene.Materials["Air 1"].Attenuation = new ExponentalAttenuation(0.05, 0.05, 1);
                    scene.RenderOptions.EnvironmentAttenuation = new ExponentalAttenuation(0.05, 0.05, 0.05);
                    scene.Lights["light4"].Pos = new Vector3(1.5, 1.5, -9.5);
                    scene.Lights["light2"].Color = new ColorFloat(0.5);
                    scene.Lights["light3"].Color = new ColorFloat(0.5);
                    scene.Lights["light4"].Color = new ColorFloat(0.5);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "attenuation two spheres #2",
                Path = "Shadow testers", 
                Index = 598,
                GetScene = () =>
                {
                    Scene scene = Scenes.Sphere_Refraction1(0.1, true);
                    Fast(scene);
                    scene.RenderOptions.EnvironmentRefractionIndice =
                        RefractiveIndices.Air;
                    scene.RenderableObjects["sphere"].DefaultMaterial.Name = "Air";
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionIndice =
                        RefractiveIndices.Air;
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionIndice = RefractiveIndices.Air;
                    scene.RenderableObjects["sphere"].DefaultMaterial.Name = "Air";
                    scene.RenderableObjects["t1"].DefaultMaterial.ReflectionTransmittance = null;
                    scene.RenderableObjects["sphere"].Pos = new Vector3(0, 0, -10);
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -14);
                    scene.RenderableObjects.Add(new SphereObject(Vector3.XAXIS, Vector3.YAXIS)
                    {
                        Pos = new Vector3(0, 0, -8.3),
                        Radius = 1,
                        DefaultMaterial = TestMaterials.Refractive("Air 1", new ColorFloat(0.1)),
                        Name = "sphere2"
                    });
                    scene.RenderableObjects["sphere2"].DefaultMaterial.RefractionIndice =
                        RefractiveIndices.Air;
                    scene.Materials["Air"].Attenuation = new ExponentalAttenuation(1, 0.05, 0.05);
                    scene.Materials["Air 1"].Attenuation = new ExponentalAttenuation(0.05, 0.05, 1);
                    scene.RenderOptions.EnvironmentAttenuation = new ExponentalAttenuation(0.05, 0.05, 0.05);
                    scene.Lights["light4"].Pos = new Vector3(1.5, 1.5, -9.5);
                    scene.Lights["light2"].Color = new ColorFloat(0.5);
                    scene.Lights["light3"].Color = new ColorFloat(0.5);
                    scene.Lights["light4"].Color = new ColorFloat(0.5);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "attenuation two spheres #3",
                Path = "Shadow testers", 
                Index = 599,
                GetScene = () =>
                {
                    Scene scene = Scenes.Sphere_Refraction1(0.1, true);
                    Fast(scene);
                    scene.RenderOptions.EnvironmentRefractionIndice =
                        RefractiveIndices.Air;
                    scene.RenderableObjects["sphere"].DefaultMaterial.Name = "Air";
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionIndice =
                        RefractiveIndices.Air;
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionIndice = RefractiveIndices.Air;
                    scene.RenderableObjects["sphere"].DefaultMaterial.Name = "Air";
                    scene.RenderableObjects["t1"].DefaultMaterial.ReflectionTransmittance = null;
                    scene.RenderableObjects["sphere"].Pos = new Vector3(0, 0, -10);
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -14);
                    scene.RenderableObjects.Add(new SphereObject(Vector3.XAXIS, Vector3.YAXIS)
                    {
                        Pos = new Vector3(0, 0, -10),
                        Radius = 0.5,
                        DefaultMaterial = TestMaterials.Refractive("Air 1", new ColorFloat(0.1)),
                        Name = "sphere2"
                    });
                    scene.RenderableObjects["sphere2"].DefaultMaterial.RefractionIndice =
                        RefractiveIndices.Air;
                    scene.Materials["Air"].Attenuation = new ExponentalAttenuation(1, 0.05, 0.05);
                    scene.Materials["Air 1"].Attenuation = new ExponentalAttenuation(0.05, 0.05, 1);
                    scene.RenderOptions.EnvironmentAttenuation = new ExponentalAttenuation(0.05, 0.05, 0.05);
                    scene.Lights["light4"].Pos = new Vector3(1.5, 1.5, -9.5);
                    scene.Lights["light2"].Color = new ColorFloat(0.5);
                    scene.Lights["light3"].Color = new ColorFloat(0.5);
                    scene.Lights["light4"].Color = new ColorFloat(0.5);

                    return scene;
                }
            });
        }
        private static void Generate_0600_0609()
        {
            List.Add(new TestScene()
            {
                Name = "attenuation two spheres solid shadows",
                Path = "Shadow testers", 
                Index = 600,
                GetScene = () =>
                {
                    Scene scene = Scenes.Sphere_Refraction1(0.1, true);
                    Fast(scene);
                    scene.RenderOptions.ShadowTestMethod = ShadowTestMethod.Solid;
                    scene.RenderOptions.EnvironmentRefractionIndice =
                        RefractiveIndices.Air;
                    scene.RenderableObjects["sphere"].DefaultMaterial.Name = "Air";
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionIndice =
                        RefractiveIndices.Air;
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionIndice = RefractiveIndices.Air;
                    scene.RenderableObjects["sphere"].DefaultMaterial.Name = "Air";
                    scene.RenderableObjects["t1"].DefaultMaterial.ReflectionTransmittance = null;
                    scene.RenderableObjects["sphere"].Pos = new Vector3(0, 0, -10);
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -14);
                    scene.RenderableObjects.Add(new SphereObject(Vector3.XAXIS, Vector3.YAXIS)
                    {
                        Pos = new Vector3(0, 0, -8.3),
                        Radius = 1,
                        DefaultMaterial = TestMaterials.Refractive("Air 1", new ColorFloat(0.1)),
                        Name = "sphere2"
                    });
                    scene.RenderableObjects["sphere2"].DefaultMaterial.RefractionIndice =
                        RefractiveIndices.Air;
                    scene.Materials["Air"].Attenuation = new ExponentalAttenuation(1, 0.05, 0.05);
                    scene.Materials["Air 1"].Attenuation = new ExponentalAttenuation(0.05, 0.05, 1);
                    scene.RenderOptions.EnvironmentAttenuation = new ExponentalAttenuation(0.05, 0.05, 0.05);
                    scene.Lights["light4"].Pos = new Vector3(1.5, 1.5, -9.5);
                    scene.Lights["light2"].Color = new ColorFloat(0.5);
                    scene.Lights["light3"].Color = new ColorFloat(0.5);
                    scene.Lights["light4"].Color = new ColorFloat(0.5);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "attenuation poly color mix #1",
                Path = "Shadow testers", 
                Index = 601,
                GetScene = () =>
                {
                    Scene scene = Scenes.Sphere_Refraction1();
                    Fast(scene);
                    scene.RenderableObjects["t1"].DefaultMaterial = TestMaterials.CheckBoard("checkboard",
                        new ColorFloat(0, 0.5, 0.5),
                        new ColorFloat(0.5, 0.5, 0), 0.1, 0.1);
                    scene.RenderableObjects["t2"].DefaultMaterial = scene.RenderableObjects["t1"].DefaultMaterial;
                    scene.RenderableObjects["sphere"].DefaultMaterial.Name = "Air";
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionIndice =
                        scene.RenderOptions.EnvironmentRefractionIndice;
                    scene.RenderableObjects["sphere"].DefaultMaterial.ReflectionTransmittance =
                        VolumesFactory.Solid(1);
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionTransmittance =
                        VolumesFactory.Solid(1);
                    scene.RenderOptions.EnvironmentAttenuation = new PolynomialAttenuation(
                        new ColorFloat(0.05, 0.05, 0.05),
                        new ColorFloat(0.05, 0.05, 0.05),
                        new ColorFloat(1.0, 1.0, 1.0));
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "attenuation poly color mix #2",
                Path = "Shadow testers", 
                Index = 602,
                GetScene = () =>
                {
                    Scene scene = Scenes.Sphere_Refraction1();
                    Fast(scene);
                    scene.RenderableObjects["t1"].DefaultMaterial = TestMaterials.CheckBoard("checkboard",
                        new ColorFloat(0, 0.5, 0.5),
                        new ColorFloat(0.5, 0.5, 0), 0.1, 0.1);
                    scene.RenderableObjects["t2"].DefaultMaterial = scene.RenderableObjects["t1"].DefaultMaterial;
                    scene.RenderableObjects["sphere"].DefaultMaterial.Name = "Air";
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionIndice =
                        scene.RenderOptions.EnvironmentRefractionIndice;
                    scene.RenderableObjects["sphere"].DefaultMaterial.ReflectionTransmittance =
                        VolumesFactory.Solid(1);
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionTransmittance =
                        VolumesFactory.Solid(1);
                    scene.RenderOptions.EnvironmentAttenuation = new PolynomialAttenuation(
                        new ColorFloat(0.0, 0.05, 0.05),
                        new ColorFloat(0.0, 0.05, 0.05),
                        new ColorFloat(0.0, 1.0, 1.0));
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "attenuation poly color mix #3",
                Path = "Shadow testers", 
                Index = 603,
                GetScene = () =>
                {
                    Scene scene = Scenes.Sphere_Refraction1();
                    Fast(scene);
                    scene.RenderableObjects["t1"].DefaultMaterial = TestMaterials.CheckBoard("checkboard",
                        new ColorFloat(0, 0.5, 0.5),
                        new ColorFloat(0.5, 0.5, 0), 0.1, 0.1);
                    scene.RenderableObjects["t2"].DefaultMaterial = scene.RenderableObjects["t1"].DefaultMaterial;
                    scene.RenderableObjects["sphere"].DefaultMaterial.Name = "Air";
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionIndice =
                        scene.RenderOptions.EnvironmentRefractionIndice;
                    scene.RenderableObjects["sphere"].DefaultMaterial.ReflectionTransmittance =
                        VolumesFactory.Solid(1);
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionTransmittance =
                        VolumesFactory.Solid(1);
                    scene.RenderOptions.EnvironmentAttenuation = new PolynomialAttenuation(
                        new ColorFloat(0.05, 0.0, 0.05),
                        new ColorFloat(0.05, 0.0, 0.05),
                        new ColorFloat(1.0, 0.0, 1.0));
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "attenuation poly color mix #4",
                Path = "Shadow testers", 
                Index = 604,
                GetScene = () =>
                {
                    Scene scene = Scenes.Sphere_Refraction1();
                    Fast(scene);
                    scene.RenderableObjects["t1"].DefaultMaterial = TestMaterials.CheckBoard("checkboard",
                        new ColorFloat(0, 0.5, 0.5),
                        new ColorFloat(0.5, 0.5, 0), 0.1, 0.1);
                    scene.RenderableObjects["t2"].DefaultMaterial = scene.RenderableObjects["t1"].DefaultMaterial;
                    scene.RenderableObjects["sphere"].DefaultMaterial.Name = "Air";
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionIndice =
                        scene.RenderOptions.EnvironmentRefractionIndice;
                    scene.RenderableObjects["sphere"].DefaultMaterial.ReflectionTransmittance =
                        VolumesFactory.Solid(1);
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionTransmittance =
                        VolumesFactory.Solid(1);
                    scene.RenderOptions.EnvironmentAttenuation = new PolynomialAttenuation(
                        new ColorFloat(0.05, 0.05, 0.0),
                        new ColorFloat(0.05, 0.05, 0.0),
                        new ColorFloat(1.0, 1.0, 0.0));
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "attenuation poly color mix #5",
                Path = "Shadow testers", 
                Index = 605,
                GetScene = () =>
                {
                    Scene scene = Scenes.Sphere_Refraction1();
                    Fast(scene);
                    scene.RenderableObjects["t1"].DefaultMaterial = TestMaterials.CheckBoard("checkboard",
                        new ColorFloat(0, 0.5, 0.5),
                        new ColorFloat(0.5, 0.5, 0), 0.1, 0.1);
                    scene.RenderableObjects["t2"].DefaultMaterial = scene.RenderableObjects["t1"].DefaultMaterial;
                    scene.RenderableObjects["sphere"].DefaultMaterial.Name = "Air";
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionIndice =
                        scene.RenderOptions.EnvironmentRefractionIndice;
                    scene.RenderableObjects["sphere"].DefaultMaterial.ReflectionTransmittance =
                        VolumesFactory.Solid(1);
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionTransmittance =
                        VolumesFactory.Solid(1);
                    scene.RenderOptions.EnvironmentAttenuation = new PolynomialAttenuation(
                        new ColorFloat(0.05, 0.05, 0.05),
                        new ColorFloat(0.05, 0.05, 0.05),
                        new ColorFloat(2.0, 2.0, 2.0));
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "attenuation poly color mix #6",
                Path = "Shadow testers", 
                Index = 606,
                GetScene = () =>
                {
                    Scene scene = Scenes.Sphere_Refraction1();
                    Fast(scene);
                    scene.RenderableObjects["t1"].DefaultMaterial = TestMaterials.CheckBoard("checkboard",
                        new ColorFloat(0, 0.5, 0.5),
                        new ColorFloat(0.5, 0.5, 0), 0.1, 0.1);
                    scene.RenderableObjects["t2"].DefaultMaterial = scene.RenderableObjects["t1"].DefaultMaterial;
                    scene.RenderableObjects["sphere"].DefaultMaterial.Name = "Air";
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionIndice =
                        scene.RenderOptions.EnvironmentRefractionIndice;
                    scene.RenderableObjects["sphere"].DefaultMaterial.ReflectionTransmittance =
                        VolumesFactory.Solid(1);
                    scene.RenderableObjects["sphere"].DefaultMaterial.RefractionTransmittance =
                        VolumesFactory.Solid(1);
                    scene.RenderOptions.EnvironmentAttenuation = new PolynomialAttenuation(
                        new ColorFloat(0.15, 0.15, 0.15),
                        new ColorFloat(0.15, 0.15, 0.15),
                        new ColorFloat(1.0, 1.0, 1.0));
                    return scene;
                }
            });


        }

        private static void Generate_0620_0629()
        {
            List.Add(new TestScene()
            {
                Name = "torus z-",
                Path = "Torus", 
                Index = 620,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus x+",
                Path = "Torus", 
                Index = 621,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.ActiveCamera.RotateAround(Vector3.ZERO, Vector3.YAXIS, -90);
                    scene.Lights.ForEach(l => l.RotateAround(Vector3.ZERO, Vector3.YAXIS, -90));
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus y+",
                Path = "Torus", 
                Index = 622,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.ActiveCamera.RotateAround(Vector3.ZERO, Vector3.XAXIS, 90);
                    scene.Lights.ForEach(l => l.RotateAround(Vector3.ZERO, Vector3.XAXIS, 90));
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus 90x",
                Path = "Torus", 
                Index = 623,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundUp(90);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus -90y",
                Path = "Torus", 
                Index = 624,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundRight(-90);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus -90z",
                Path = "Torus", 
                Index = 625,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundForward(-90);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus 30x",
                Path = "Torus", 
                Index = 626,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundUp(30);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus -80x",
                Path = "Torus", 
                Index = 627,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundUp(-80);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus 10y",
                Path = "Torus", 
                Index = 628,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundRight(10);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus -70y",
                Path = "Torus", 
                Index = 629,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundRight(-70);
                    return scene;
                }
            });
        }

        private static void Generate_0630_0639()
        {
            List.Add(new TestScene()
            {
                Name = "torus -5z",
                Path = "Torus", 
                Index = 630,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundForward(-5);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus 85z",
                Path = "Torus", 
                Index = 631,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundForward(85);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus 70x 20y",
                Path = "Torus", 
                Index = 632,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundRight(70);
                    scene.RenderableObjects["torus"].RotateAroundUp(20);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus scale x",
                Path = "Torus", 
                Index = 633,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].ScaleX = 0.5;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus scale y",
                Path = "Torus", 
                Index = 634,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].ScaleY = 0.5;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus scale z",
                Path = "Torus", 
                Index = 635,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].ScaleZ = 0.5;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus 70x 20y scale x",
                Path = "Torus", 
                Index = 636,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundRight(70);
                    scene.RenderableObjects["torus"].RotateAroundUp(20);
                    scene.RenderableObjects["torus"].ScaleX = 0.5;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus 70x 20y scale y",
                Path = "Torus", 
                Index = 637,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundRight(70);
                    scene.RenderableObjects["torus"].RotateAroundUp(20);
                    scene.RenderableObjects["torus"].ScaleY = 0.5;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus 70x 20y scale z",
                Path = "Torus", 
                Index = 638,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundRight(70);
                    scene.RenderableObjects["torus"].RotateAroundUp(20);
                    scene.RenderableObjects["torus"].ScaleZ = 0.5;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus 70x 20y scale xyz",
                Path = "Torus", 
                Index = 639,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundRight(70);
                    scene.RenderableObjects["torus"].RotateAroundUp(20);
                    scene.RenderableObjects["torus"].ScaleX = 0.5;
                    scene.RenderableObjects["torus"].ScaleY = 0.8;
                    scene.RenderableObjects["torus"].ScaleZ = 2;
                    return scene;
                }
            });
        }
        private static void Generate_0640_0649()
        {
            List.Add(new TestScene()
            {
                Name = "torus z- check",
                Path = "Torus", 
                Index = 640,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.CheckBoard("check",
                        ColorFloat.SRGB_Blue, ColorFloat.SRGB_Green, 0.1 / 2, 0.25 / 2);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus x+ check",
                Path = "Torus", 
                Index = 641,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.ActiveCamera.RotateAround(Vector3.ZERO, Vector3.YAXIS, -90);
                    scene.Lights.ForEach(l => l.RotateAround(Vector3.ZERO, Vector3.YAXIS, -90));
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.CheckBoard("check",
                        ColorFloat.SRGB_Blue, ColorFloat.SRGB_Green, 0.1 / 2, 0.25 / 2);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus y+ check",
                Path = "Torus", 
                Index = 642,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.ActiveCamera.RotateAround(Vector3.ZERO, Vector3.XAXIS, 90);
                    scene.Lights.ForEach(l => l.RotateAround(Vector3.ZERO, Vector3.XAXIS, 90));
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.CheckBoard("check",
                        ColorFloat.SRGB_Blue, ColorFloat.SRGB_Green, 0.1 / 2, 0.25 / 2);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus 90x check",
                Path = "Torus", 
                Index = 643,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundUp(90);
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.CheckBoard("check",
                        ColorFloat.SRGB_Blue, ColorFloat.SRGB_Green, 0.1 / 2, 0.25 / 2);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus -90y check",
                Path = "Torus", 
                Index = 644,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundRight(-90);
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.CheckBoard("check",
                        ColorFloat.SRGB_Blue, ColorFloat.SRGB_Green, 0.1 / 2, 0.25 / 2);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus -90z check",
                Path = "Torus", 
                Index = 645,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundForward(-90);
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.CheckBoard("check",
                        ColorFloat.SRGB_Blue, ColorFloat.SRGB_Green, 0.1 / 2, 0.25 / 2);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus 30x check",
                Path = "Torus", 
                Index = 646,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundUp(30);
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.CheckBoard("check",
                        ColorFloat.SRGB_Blue, ColorFloat.SRGB_Green, 0.1 / 2, 0.25 / 2);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus -80x check",
                Path = "Torus", 
                Index = 647,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundUp(-80);
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.CheckBoard("check",
                        ColorFloat.SRGB_Blue, ColorFloat.SRGB_Green, 0.1 / 2, 0.25 / 2);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus 10y check",
                Path = "Torus", 
                Index = 648,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundRight(10);
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.CheckBoard("check",
                        ColorFloat.SRGB_Blue, ColorFloat.SRGB_Green, 0.1 / 2, 0.25 / 2);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus -70y check",
                Path = "Torus", 
                Index = 649,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundRight(-70);
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.CheckBoard("check",
                        ColorFloat.SRGB_Blue, ColorFloat.SRGB_Green, 0.1 / 2, 0.25 / 2);
                    scene.RenderableObjects["torus"].RotateAroundRight(-70);
                    return scene;
                }
            });
        }

        private static void Generate_0650_0659()
        {
            List.Add(new TestScene()
            {
                Name = "torus -5z check",
                Path = "Torus", 
                Index = 650,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundForward(-5);
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.CheckBoard("check",
                        ColorFloat.SRGB_Blue, ColorFloat.SRGB_Green, 0.1 / 2, 0.25 / 2);
                    scene.RenderableObjects["torus"].RotateAroundForward(-5);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus 85z check",
                Path = "Torus", 
                Index = 651,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundForward(85);
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.CheckBoard("check",
                        ColorFloat.SRGB_Blue, ColorFloat.SRGB_Green, 0.1 / 2, 0.25 / 2);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus 70x 20y check",
                Path = "Torus", 
                Index = 652,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundRight(70);
                    scene.RenderableObjects["torus"].RotateAroundUp(20);
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.CheckBoard("check",
                        ColorFloat.SRGB_Blue, ColorFloat.SRGB_Green, 0.1 / 2, 0.25 / 2);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus scale x check",
                Path = "Torus", 
                Index = 653,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].ScaleX = 0.5;
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.CheckBoard("check",
                        ColorFloat.SRGB_Blue, ColorFloat.SRGB_Green, 0.1 / 2, 0.25 / 2);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus scale y check",
                Path = "Torus", 
                Index = 654,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].ScaleY = 0.5;
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.CheckBoard("check",
                        ColorFloat.SRGB_Blue, ColorFloat.SRGB_Green, 0.1 / 2, 0.25 / 2);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus scale z check",
                Path = "Torus", 
                Index = 655,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].ScaleZ = 0.5;
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.CheckBoard("check",
                        ColorFloat.SRGB_Blue, ColorFloat.SRGB_Green, 0.1 / 2, 0.25 / 2);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus 70x 20y scale x check",
                Path = "Torus", 
                Index = 656,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundRight(70);
                    scene.RenderableObjects["torus"].RotateAroundUp(20);
                    scene.RenderableObjects["torus"].ScaleX = 0.5;
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.CheckBoard("check",
                        ColorFloat.SRGB_Blue, ColorFloat.SRGB_Green, 0.1 / 2, 0.25 / 2);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus 70x 20y scale y check",
                Path = "Torus", 
                Index = 657,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundRight(70);
                    scene.RenderableObjects["torus"].RotateAroundUp(20);
                    scene.RenderableObjects["torus"].ScaleY = 0.5;
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.CheckBoard("check",
                        ColorFloat.SRGB_Blue, ColorFloat.SRGB_Green, 0.1 / 2, 0.25 / 2);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus 70x 20y scale z check",
                Path = "Torus", 
                Index = 658,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundRight(70);
                    scene.RenderableObjects["torus"].RotateAroundUp(20);
                    scene.RenderableObjects["torus"].ScaleZ = 0.5;
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.CheckBoard("check",
                        ColorFloat.SRGB_Blue, ColorFloat.SRGB_Green, 0.1 / 2, 0.25 / 2);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus 70x 20y scale xyz check",
                Path = "Torus", 
                Index = 659,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundRight(70);
                    scene.RenderableObjects["torus"].RotateAroundUp(20);
                    scene.RenderableObjects["torus"].ScaleX = 0.5;
                    scene.RenderableObjects["torus"].ScaleY = 0.8;
                    scene.RenderableObjects["torus"].ScaleZ = 2;
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.CheckBoard("check",
                        ColorFloat.SRGB_Blue, ColorFloat.SRGB_Green, 0.1 / 2, 0.25 / 2);
                    return scene;
                }
            });
        }

        private static void Generate_0660_0669()
        {
            List.Add(new TestScene()
            {
                Name = "torus -5x",
                Path = "Torus", 
                Index = 660,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundRight(-5);
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.CheckBoard("check",
                        ColorFloat.SRGB_Blue, ColorFloat.SRGB_Green, 0.1 / 2, 0.25 / 2);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus 5x",
                Path = "Torus", 
                Index = 661,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundRight(5);
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.CheckBoard("check",
                        ColorFloat.SRGB_Blue, ColorFloat.SRGB_Green, 0.1 / 2, 0.25 / 2);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus -1y",
                Path = "Torus", 
                Index = 662,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundUp(-1);
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.CheckBoard("check",
                        ColorFloat.SRGB_Blue, ColorFloat.SRGB_Green, 0.1 / 2, 0.25 / 2);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus 1y",
                Path = "Torus", 
                Index = 663,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundUp(1);
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.CheckBoard("check",
                        ColorFloat.SRGB_Blue, ColorFloat.SRGB_Green, 0.1 / 2, 0.25 / 2);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus -1z",
                Path = "Torus", 
                Index = 664,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundForward(-1);
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.CheckBoard("check",
                        ColorFloat.SRGB_Blue, ColorFloat.SRGB_Green, 0.1 / 2, 0.25 / 2);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus 1z",
                Path = "Torus", 
                Index = 665,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundForward(1);
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.CheckBoard("check",
                        ColorFloat.SRGB_Blue, ColorFloat.SRGB_Green, 0.1 / 2, 0.25 / 2);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus z- mushroom",
                Path = "Torus", 
                Index = 666,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.Mushroom();
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus x+ mushroom",
                Path = "Torus", 
                Index = 667,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.ActiveCamera.RotateAround(Vector3.ZERO, Vector3.YAXIS, -90);
                    scene.Lights.ForEach(l => l.RotateAround(Vector3.ZERO, Vector3.YAXIS, -90));
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.Mushroom();
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus y+ mushroom",
                Path = "Torus", 
                Index = 668,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.ActiveCamera.RotateAround(Vector3.ZERO, Vector3.XAXIS, 90);
                    scene.Lights.ForEach(l => l.RotateAround(Vector3.ZERO, Vector3.XAXIS, 90));
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.Mushroom();
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus 90x mushroom",
                Path = "Torus", 
                Index = 669,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundUp(90);
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.Mushroom();
                    return scene;
                }
            });
        }

        private static void Generate_0670_0679()
        {
            List.Add(new TestScene()
            {
                Name = "torus -90y mushroom",
                Path = "Torus", 
                Index = 670,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundRight(-90);
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.Mushroom();
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus -90z mushroom",
                Path = "Torus", 
                Index = 671,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundForward(-90);
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.Mushroom();
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus 30x mushroom",
                Path = "Torus", 
                Index = 672,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundUp(30);
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.Mushroom();
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus -80x mushroom",
                Path = "Torus", 
                Index = 673,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundUp(-80);
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.Mushroom();
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus 10y mushroom",
                Path = "Torus", 
                Index = 674,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundRight(10);
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.Mushroom();
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus -70y mushroom",
                Path = "Torus", 
                Index = 675,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundRight(-70);
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.Mushroom();
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus -5z mushroom",
                Path = "Torus", 
                Index = 676,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundForward(-5);
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.Mushroom();
                    scene.RenderableObjects["torus"].RotateAroundForward(-5);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus 85z mushroom",
                Path = "Torus", 
                Index = 677,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundForward(85);
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.Mushroom();
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus 70x 20y mushroom",
                Path = "Torus", 
                Index = 678,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundRight(70);
                    scene.RenderableObjects["torus"].RotateAroundUp(20);
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.Mushroom();
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus scale x mushroom",
                Path = "Torus", 
                Index = 679,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].ScaleX = 0.5;
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.Mushroom();
                    return scene;
                }
            });
        }

        private static void Generate_0680_0689()
        {
            List.Add(new TestScene()
            {
                Name = "torus scale y mushroom",
                Path = "Torus", 
                Index = 680,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].ScaleY = 0.5;
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.Mushroom();
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus scale z mushroom",
                Path = "Torus", 
                Index = 681,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].ScaleZ = 0.5;
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.Mushroom();
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus 70x 20y scale x mushroom",
                Path = "Torus", 
                Index = 682,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundRight(70);
                    scene.RenderableObjects["torus"].RotateAroundUp(20);
                    scene.RenderableObjects["torus"].ScaleX = 0.5;
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.Mushroom();
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus 70x 20y scale y mushroom",
                Path = "Torus", 
                Index = 683,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundRight(70);
                    scene.RenderableObjects["torus"].RotateAroundUp(20);
                    scene.RenderableObjects["torus"].ScaleY = 0.5;
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.Mushroom();
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus 70x 20y scale z mushroom",
                Path = "Torus", 
                Index = 684,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundRight(70);
                    scene.RenderableObjects["torus"].RotateAroundUp(20);
                    scene.RenderableObjects["torus"].ScaleZ = 0.5;
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.Mushroom();
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus -30x -20z scale xyz mushroom",
                Path = "Torus", 
                Index = 685,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].RotateAroundRight(-30);
                    scene.RenderableObjects["torus"].RotateAroundForward(-20);
                    scene.RenderableObjects["torus"].ScaleX = 0.5;
                    scene.RenderableObjects["torus"].ScaleY = 2;
                    scene.RenderableObjects["torus"].ScaleZ = 1;
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.Mushroom();
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus moved 1 mushroom",
                Path = "Torus", 
                Index = 686,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.Mushroom();
                    scene.RenderableObjects["torus"].Pos += new Vector3(0.5, 0, 0);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus moved 2 mushroom",
                Path = "Torus", 
                Index = 687,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.Mushroom();
                    scene.RenderableObjects["torus"].Pos += new Vector3(0, 0.5, 0);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus moved 3 mushroom",
                Path = "Torus", 
                Index = 688,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.Mushroom();
                    scene.RenderableObjects["torus"].Pos += new Vector3(0, 0, 0.5);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "torus moved 4 mushroom",
                Path = "Torus", 
                Index = 689,
                GetScene = () =>
                {
                    Scene scene = Scenes.Torus();
                    Fast(scene);
                    scene.RenderableObjects["torus"].DefaultMaterial = TestMaterials.Mushroom();
                    scene.RenderableObjects["torus"].Pos += new Vector3(0.5, 0.5, 0.5);
                    return scene;
                }
            });
        }
    }
}